#include "function.h"

struct node *getNames(FILE *fp)
{
    // 准备好内存
    struct node *n = calloc(1, sizeof(struct node));
    if(n != NULL)
    {
        n->names = calloc(100, 20);
        if(n->names == NULL)
        {
            free(n);
            return NULL;
        }
    }

    // 读取名单
    bool done = false;

    for(int i=0; i<100; i++)
    {
        if(fgets(n->names[i], 20, fp) == NULL) // 读完了
        {
            done = true;
            break;
        }
        
        // 去除多余的\r\n，更新总人数
        strtok(n->names[i], "\r\n");
        n->totalNum++;
        printf("totalNum: %d\n", n->totalNum);
    }
    if(!done)
    {
        n->names = realloc(n->names, 200*20);
        for(int i=100; i<200; i++)
        {
            if(fgets(n->names[i], 20, fp) == NULL) // 读完了
            {
                done = true;
                break;
            }
            
            // 去除多余的\r\n，更新总人数
            strtok(n->names[i], "\r\n");
            n->totalNum++;
            printf("totalNum: %d\n", n->totalNum);
        }
    }
    // 名字超过200个，存储空间不够，放弃继续读取
    if(!done)
    {
        printf("抱歉，班级人数最多支持200人，本次只取前200名\n");
    }

    return n;
}

int showName(struct node *n)
{
    int num;

    for(int i=0; i<30; i++)
    {
        num = rand() % n->totalNum;
        fprintf(stderr, "%s    \r", n->names[num]);
        usleep((i/10+1)*100*1000);
    }

    return num;
}

int uniq(int num, int randNum[], int len, struct node *n)
{
    while(1)
    {
        int i;
        for(i=0; i<len; i++)
        {
            if(num == randNum[i])
            {
                num = rand()%n->totalNum;
                break;
            }
        }
        if(i == len)
            break;
    }

    return num;
}